package MapaJuego;

public class Mapa {
    // #creamos un mapa bidimensional que contiene objetos tipo "celda"
    private celda[][] tabla;

    // #constructor del mapa, recibe el tamanio X e Y del mapa
    public Mapa(int a, int b){
        this.tabla = new celda[a+1][b+1];
    }

    // #crea e inicializa cada una de las celdas del mapa, recibe como parametros el tamanio del mapa
    public void initab(int a, int b)
    {
        //Llena el mapa con valores de agua, arena
        for (int i=0;i<a;i++)
             for (int j=0;j<b;j++)
                 this.tabla[i][j] = new celda(i,j,tipoTerreno.agua,'~');                
        for (int i=3;i<a-3;i++)
             for (int j=3;j<b-3;j++)
                 this.tabla[i][j] = new celda(i,j,tipoTerreno.arena,'*');
    }

    // #imprime el mapa en pantalla
    public void imprimetab()
    {
        /*
        //crea el flujo de entrada
        Scanner lector = new Scanner(System.in);
        //Escriba coord
        System.out.println("Escribe las coord x e y");
        int x = lector.nextInt();
        int y = lector.nextInt(); */
        //this.setChar(4, 6, 'G');

        // # imprime los bordes del mapa
        System.out.printf("%5c", ' ');
        for (int i=1;i<tabla.length;i++) System.out.printf("%4d",i);
        System.out.print("\n");

        // # imprime el terreno
        for (int i=1;i<tabla.length;i++){
             for (int j=1;j<tabla[0].length;j++){
                  if (this.tabla[i-1][j-1].tipo()==tipoTerreno.agua){
                      if (j==1) System.out.printf("%5d", i);
                     System.out.printf("%4c", tabla[i-1][j-1].lee_char());
                 }
                  else {
                      if (this.tabla[i-1][j-1].tipo()==tipoTerreno.arena)
                          System.out.printf("%4c",tabla[i-1][j-1].lee_char()); }
            }
            System.out.print('\n');
        }
        
    }

    // # devuelve 1 si la celda definida por las coord X e Y estÃ¡ ocupada por un objeto Ã³ una construcciÃ³n
    public int ver_celda_ocupada(int x, int y)
    {
        if (this.tabla[x][y].ocupado()== 1) return 1;
        else return 0;
    }

    // # recibe como parÃ¡metros una coordenada X e Y verifica si es compatible la construcciÃ³n en ese lugar de un edificio u objeto segÃºn su tipo de terreno
    public int buen_terreno(int x, int y, tipoTerreno tipo){
        if (tipo==this.tabla[x][y].tipo()) return 1;
        else return 0;
    }
    // # devuelve la celda referenciada por las coordenadas X e Y del mapa pasadas como parÃ¡metros
    public celda getCelda(int x, int y){
         return tabla[x][y];
     }
    // # setea en la posicion X,Y del mapa el atributo "caracter (imprimible)" con un valor dado como parametro
     public void setChar(int x, int y, char c){
         this.tabla[x-1][y-1].mod_char(c);
     }
}
